//读者优先；
int readcount = 0;    //记录读者数量；
semaphore rmutex = 1; //保证在更新readcount时的互斥；
semaphore mutex = 1;  //对数据区的互斥操作

reader()
{ //读者进程
    while (true)
    {
        wait(rmutex); //申请readcount使用权，准备更新
        if (readcount == 0)
        { //开始进入读者，阻止写者访问数据区；
            wait(mutex);
        }
        readcount++;    //读者什么加1；
        signal(rmutex); //readcount更新完毕，释放使用权；
        进行读操作;     //读者进行读操作
        wait(rmutex);   //读操作结束，申请readcount使用权，准备更新;
        readcount--;    //读者人数减1；
        if (readcount == 0)
        { //读者全部退出，允许写操作
            signal(mutex);
        }
        signal(rmutex); //readcount更新完毕，释放使用权；
    }
}

writer()
{ //写者进程
    while (true)
    {
        wait(mutex);   //申请对数据区的独占权限
        进行写操作;    //写者进行写操作
        signal(mutex); //释放数据区权限
    }
}